const express = require('express');
const router = express.Router();
const jwt = require('jsonwebtoken');

// JWT验证中间件
const authenticateToken = (req, res, next) => {
  console.log('JWT验证 - Authorization header:', req.headers.authorization);
  
  const authHeader = req.headers['authorization'];
  const token = authHeader && authHeader.split(' ')[1];
  
  console.log('JWT验证 - 提取的token:', token ? 'token存在' : 'token不存在');

  if (!token) {
    return res.status(401).json({ message: '访问令牌缺失' });
  }

  jwt.verify(token, global.JWT_SECRET, (err, user) => {
    if (err) {
      console.log('JWT验证失败:', err.message);
      return res.status(403).json({ message: '访问令牌无效' });
    }
    
    console.log('JWT验证成功 - 用户信息:', user);
    req.user = user;
    next();
  });
};

// 测试路由
router.get('/test', (req, res) => {
  console.log('购物车测试路由被访问');
  res.json({ message: '购物车路由工作正常', timestamp: new Date().toISOString() });
});

// 添加商品到购物车
router.post('/add', authenticateToken, (req, res) => {
  console.log('=== 购物车 /add 路由被访问 ===');
  console.log('时间:', new Date().toISOString());
  console.log('请求方法:', req.method);
  console.log('请求路径:', req.originalUrl);
  console.log('请求头:', JSON.stringify(req.headers, null, 2));
  console.log('请求体:', JSON.stringify(req.body, null, 2));
  
  const userId = req.user.userId;
  const { productId, quantity = 1 } = req.body;

  console.log('后端 - 收到添加购物车请求:', { userId, productId, quantity });

  if (!productId) {
    console.log('后端 - 商品ID为空');
    return res.status(400).json({ message: '商品ID不能为空' });
  }

  // 确保productId是数字
  const numericProductId = parseInt(productId);
  if (isNaN(numericProductId)) {
    console.log('后端 - 商品ID不是有效数字:', productId);
    return res.status(400).json({ message: '商品ID格式错误' });
  }

  console.log('后端 - 处理的商品ID:', numericProductId);

  // 检查购物车中是否已有该商品
  const checkCartQuery = 'SELECT * FROM cart WHERE user_id = ? AND product_id = ?';
  global.db.query(checkCartQuery, [userId, numericProductId], (err, cartItems) => {
    if (err) {
      console.error('后端 - 检查购物车失败:', err);
      return res.status(500).json({ message: '检查购物车失败' });
    }

    if (cartItems.length > 0) {
      console.log('后端 - 商品已在购物车中，更新数量');
      // 更新数量
      const updateQuery = 'UPDATE cart SET quantity = quantity + ? WHERE user_id = ? AND product_id = ?';
      global.db.query(updateQuery, [quantity, userId, numericProductId], (err) => {
        if (err) {
          console.error('后端 - 更新购物车失败:', err);
          return res.status(500).json({ message: '更新购物车失败' });
        }
        console.log('后端 - 购物车数量更新成功');
        res.json({ message: '商品已添加到购物车' });
      });
    } else {
      console.log('后端 - 添加新商品到购物车');
      // 添加新商品
      const insertQuery = 'INSERT INTO cart (user_id, product_id, quantity) VALUES (?, ?, ?)';
      global.db.query(insertQuery, [userId, numericProductId, quantity], (err) => {
        if (err) {
          console.error('后端 - 添加到购物车失败:', err);
          return res.status(500).json({ message: '添加到购物车失败' });
        }
        console.log('后端 - 商品添加到购物车成功');
        res.json({ message: '商品已添加到购物车' });
      });
    }
  });
});

// 获取购物车列表
router.get('/', authenticateToken, (req, res) => {
  console.log('=== 获取购物车列表 ===');
  const userId = req.user.userId;
  console.log('用户ID:', userId);
  
  const query = `
    SELECT 
      c.id as cart_id,
      c.product_id,
      c.quantity,
      c.created_at,
      p.id as product_id,
      p.title,
      p.description,
      p.price,
      p.original_price,
      p.image_url 
    FROM cart c 
    LEFT JOIN products p ON c.product_id = p.id 
    WHERE c.user_id = ?
    ORDER BY c.created_at DESC
  `;
  
  console.log('执行查询:', query);
  console.log('查询参数:', [userId]);
  
  global.db.query(query, [userId], (err, results) => {
    if (err) {
      console.error('获取购物车失败:', err);
      return res.status(500).json({ message: '获取购物车失败' });
    }
    
    console.log('数据库查询结果:', JSON.stringify(results, null, 2));
    console.log('查询到的记录数:', results.length);
    
    // 转换数据格式以匹配前端期望的格式
    const cartItems = results.map(item => ({
      id: item.cart_id.toString(),
      productId: item.product_id,
      name: item.title || '未知商品',
      description: item.description || '暂无描述',
      price: `¥${item.price || 0}`,
      originalPrice: item.original_price || 0,
      count: item.quantity,
      checked: false,
      storeName: '不熄灯商城',
      imageUrl: item.image_url
    }));
    
    console.log('转换后的购物车数据:', JSON.stringify(cartItems, null, 2));
    
    res.json({ 
      message: '获取成功', 
      cartItems: cartItems
    });
  });
});

// 更新购物车商品数量 - 通过cart_id
router.put('/update/:cartId', authenticateToken, (req, res) => {
  const userId = req.user.userId;
  const cartId = req.params.cartId;
  const { quantity } = req.body;
  
  console.log('更新购物车数量:', { userId, cartId, quantity });
  
  if (!cartId || quantity < 1) {
    return res.status(400).json({ message: '参数错误' });
  }
  
  // 验证购物车项是否属于当前用户
  const checkQuery = 'SELECT * FROM cart WHERE id = ? AND user_id = ?';
  global.db.query(checkQuery, [cartId, userId], (err, results) => {
    if (err) {
      console.error('验证购物车项失败:', err);
      return res.status(500).json({ message: '验证失败' });
    }
    
    if (results.length === 0) {
      return res.status(404).json({ message: '购物车项不存在' });
    }
    
    const updateQuery = 'UPDATE cart SET quantity = ? WHERE id = ? AND user_id = ?';
    global.db.query(updateQuery, [quantity, cartId, userId], (err, result) => {
      if (err) {
        console.error('更新购物车失败:', err);
        return res.status(500).json({ message: '更新失败' });
      }
      
      console.log('购物车数量更新成功');
      res.json({ message: '更新成功' });
    });
  });
});

// 批量删除购物车商品 - 必须放在单个删除之前
router.delete('/remove/batch', authenticateToken, (req, res) => {
  console.log('=== 批量删除购物车商品接口被调用 ===');
  const userId = req.user.userId;
  const { cartIds } = req.body;
  
  console.log('用户ID:', userId);
  console.log('请求体:', JSON.stringify(req.body, null, 2));
  console.log('cartIds:', cartIds);
  console.log('cartIds类型:', typeof cartIds);
  console.log('cartIds是否为数组:', Array.isArray(cartIds));
  
  if (!cartIds || !Array.isArray(cartIds) || cartIds.length === 0) {
    console.log('参数验证失败');
    return res.status(400).json({ message: '购物车ID列表不能为空' });
  }
  
  console.log('准备删除的cartIds:', cartIds);
  
  const placeholders = cartIds.map(() => '?').join(',');
  const deleteQuery = `DELETE FROM cart WHERE id IN (${placeholders}) AND user_id = ?`;
  const params = [...cartIds, userId];
  
  console.log('执行SQL:', deleteQuery);
  console.log('SQL参数:', params);
  
  global.db.query(deleteQuery, params, (err, result) => {
    if (err) {
      console.error('批量删除购物车商品失败:', err);
      return res.status(500).json({ message: '删除失败' });
    }
    
    console.log('SQL执行结果:', result);
    console.log('批量删除成功，影响行数:', result.affectedRows);
    res.json({ message: '删除成功', deletedCount: result.affectedRows });
  });
});

// 删除购物车商品 - 通过cart_id（单个删除，必须放在批量删除之后）
router.delete('/remove/:cartId', authenticateToken, (req, res) => {
  const userId = req.user.userId;
  const cartId = req.params.cartId;
  
  console.log('删除购物车商品:', { userId, cartId });
  
  if (!cartId) {
    return res.status(400).json({ message: '购物车ID不能为空' });
  }
  
  // 验证购物车项是否属于当前用户
  const checkQuery = 'SELECT * FROM cart WHERE id = ? AND user_id = ?';
  global.db.query(checkQuery, [cartId, userId], (err, results) => {
    if (err) {
      console.error('验证购物车项失败:', err);
      return res.status(500).json({ message: '验证失败' });
    }
    
    if (results.length === 0) {
      return res.status(404).json({ message: '购物车项不存在' });
    }
    
    const deleteQuery = 'DELETE FROM cart WHERE id = ? AND user_id = ?';
    global.db.query(deleteQuery, [cartId, userId], (err, result) => {
      if (err) {
        console.error('删除购物车商品失败:', err);
        return res.status(500).json({ message: '删除失败' });
      }
      
      console.log('购物车商品删除成功');
      res.json({ message: '删除成功' });
    });
  });
});

module.exports = router;








